package com.thd.springboottest.beanpostprocess;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * com.thd.springboottest.bean.MyBean
 *
 * @author: wanglei62
 * @DATE: 2020/1/21 16:16
 **/
//@Component
@MyAnnotation
public class MyBean implements InitializingBean, DisposableBean {
    @Value("${message:init}")
    private String message;

    // 顺序1. 构造方法
    public MyBean(){
        System.out.println(String.format("1.构造方法执行, message[%s]",this.message));
    }

    // 顺序2. 带有@PostConstruct注解的方法
    @PostConstruct
    public void postConstruct(){
        System.out.println(String.format(" 2.MyBean.postConstruct 方法执行, message[%s]",this.message));
    }


    // 顺序3. 实现InitializingBean接口
    public void afterPropertiesSet() throws Exception {
        System.out.println(String.format(" 3.MyBean.afterPropertiesSet 方法执行, message[%s]",this.message));
    }

    // 顺序4. @Bean的initMethod属性指定的方法(在Application.java中配置的)
    public void init(){
        System.out.println(String.format(" 4.MyBean.init 方法执行, message[%s]",this.message));

    }



    // 顺序5. @PreDestroy注解的方法
    @PreDestroy
    public void preDestroy(){
        System.out.println(String.format(" 5.MyBean.preDestroy 方法执行, message[%s]",this.message));
    }

    // 顺序6. 实现DisposableBean接口
    public void destroy() throws Exception {
        System.out.println(String.format(" 6.MyBean.destroy 方法执行, message[%s]",this.message));
    }

    // 顺序7. @Bean的destroyMethod属性指定的方法(在Application.java中配置的)
    public void dead(){
        System.out.println(String.format(" 7.MyBean.dead 方法执行, message[%s]",this.message));
    }


}

